Combinari de n luate cate p

#include<iostream.h>
using namespace std;
int x[100],n,k,p;
int are_succ(int k)
{ int as;
if (x[k]<n-p+k)
{x[k]++;
as=1;}
else as=0;
return as;
}
void afis()
{ int i;
for(i=1;i<=p;i++)
cout<<x[i]<<" ";
cout<<endl;
}
void back(int k)
{ int as,ev;
x[k]=0;
while(k>0)
{ as=are_succ(k);
if(as )
{ if( k==p) afis();
else
{ k++;
x[k]=x[k-1];// initializez cu valoarea anterioara din stiva a.i. elementele sa fie in ordine crescatoare/descrescatoare
}
}
else k--;
}
}
int main()
{
cin>>n>>p;
back(1);
return 0;
}